import 'package:flutter/painting.dart';
import 'package:ideology/shared/widgets/code_input/highlight/highlight_theme.dart';
import 'package:ideology/shared/widgets/code_input/highlight/syntax_highlighter.dart';
import 'package:ideology/shared/widgets/code_input/highlight/syntax_preset.dart';

/// 一组 **Java-ish** 的关键字集合。
///
/// - 覆盖了 Java 语言的常见保留字与字面量：
///   - **类型/修饰符**：`class`, `interface`, `enum`, `abstract`, `final`, `static`, `volatile`, `synchronized` 等；
///   - **流程控制**：`if`, `else`, `for`, `while`, `switch`, `case`, `break`, `continue`, `try`, `catch`, `finally` 等；
///   - **访问修饰符**：`public`, `protected`, `private`;
///   - **异常处理**：`throw`, `throws`;
///   - **原始类型**：`int`, `long`, `short`, `byte`, `char`, `boolean`, `double`, `float`, `void`;
///   - **字面量**：`true`, `false`, `null`;
///   - **Java 17+** 新增：`record`, `sealed`, `permits`, `var`;
///
/// - 命名为 *javaishKeywords*，因为它主要面向 Java 代码或类 Java DSL 的语法高亮，
///   并不保证和 Java 语言规范 100% 对齐，但足以覆盖大部分关键字场景。
///
/// 匹配语义：
/// - 实际由 [SyntaxHighlighter] 控制，通常是基于完整单词匹配，避免误匹配标识符的子串。
const Set<String> javaishKeywords = {
  'abstract','assert','boolean','break','byte','case','catch','char','class','const','continue',
  'default','do','double','else','enum','extends','final','finally','float','for','goto','if',
  'implements','import','instanceof','int','interface','long','native','new','package','private',
  'protected','public','return','short','static','strictfp','super','switch','synchronized','this',
  'throw','throws','transient','try','void','volatile','while','true','false','null',
  // Java 17+
  'record','sealed','permits','var',
};

/// 使用给定的 [base] 样式构建一套 **Java-ish** 语法高亮预设。
///
/// 返回的 [SyntaxPreset] 包含：
/// - 一个基于 [HighlightTheme.light] 的浅色主题，继承自传入的 [base] 样式；
/// - 一个 [SyntaxHighlighter]，配置了 [javaishKeywords] 作为关键字集合。
///
/// ### 用法示例
/// ```dart
/// final preset = makeJavaishPreset(
///   const TextStyle(fontFamily: 'Fira Code', fontSize: 14),
/// );
///
/// // 之后可将 preset.theme 和 preset.highlighter
/// // 注入到代码编辑控件，得到 Java-ish 语法高亮效果。
/// ```
///
/// ### 扩展说明
/// - 如需支持 **注释**（`// ...` 或 `/* ... */`）与 **字符串字面量**，
///   可以在构造 [SyntaxHighlighter] 时额外传入正则参数：
///   `singleLineCommentPattern`、`multiLineCommentPattern`、`stringPattern`。
/// - 本实现只配置了关键字集合和主题，满足基础 Java-ish 代码高亮需求。
SyntaxPreset makeJavaishPreset(TextStyle base) {
  // 1. 基于传入的基础 TextStyle 构造浅色主题
  final theme = HighlightTheme.light(base: base);

  // 2. 创建语法高亮器，传入 Java-ish 关键字集合和主题
  final highlighter = SyntaxHighlighter(
    keywords: javaishKeywords,
    theme: theme,
  );

  // 3. 打包为 SyntaxPreset 返回
  return SyntaxPreset(highlighter: highlighter, theme: theme);
}
